﻿using System;
using System.CodeDom;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Triunfadores.Repository.Service;
using Triunfadores.BusinessEntities;

namespace Triunfadores.Repository
{
    public class VentaAccionRepository:MasterRepository,IVentaAccionRepository
    {
        public IEnumerable<VentaAccion> ObtenerTodasLasVentasAcciones()
        {
            var query = from va in Context.VentaAcciones
                select va;

            return query.ToList();

        }

        public VentaAccion ObtenerVentaAccionesPorId(int id)
        {
            var query = from va in Context.VentaAcciones
                .Include("Socio")
                .Include("VentaAccionDetalles.Accion")
                        where va.Id.Equals(id)
                        select va;

            return query.SingleOrDefault();
        }

        public void AddVentaAccion(VentaAccion ventaAccion)
        {
            Context.Entry(ventaAccion.Socio).State = EntityState.Unchanged;
            ventaAccion.VentaAccionDetalles.ForEach(i => Context.Entry(i.Accion).State = EntityState.Unchanged);

            Context.VentaAcciones.Add(ventaAccion);
            Context.SaveChanges();
        }

        public void UpdateVentaAccion(VentaAccion ventaAccion)
        {
            throw new NotImplementedException();
        }

        public void DeleteVentaAccion(int id)
        {
            throw new NotImplementedException();
        }


        public IEnumerable<VentaAccion> GetVentaAccionesByNombClienteAndFechas(string nombCliente, DateTime? fechInicial, DateTime? fechFinal)
        {
            #region Primero
            //obtengo todos las solicitudes de prestamos
            var query = (from sp in Context.VentaAcciones
                        .Include("Socio")
                         orderby sp.FechaVenta descending
                         select sp).Take(100);

            //filtro por nombre
            if (!string.IsNullOrEmpty(nombCliente))
            {
                query = (from sp in query
                         where sp.Socio.Nombres.ToUpper().Contains(nombCliente.ToUpper())
                         orderby sp.FechaVenta descending
                         select sp).Take(50);
            }

            //filtro por rango de fechas ingresado
            if (fechInicial.HasValue && fechFinal.HasValue)
            {
                fechInicial = DateTime.Parse(fechInicial.Value.ToShortDateString() + " 00:00:00");
                fechFinal = DateTime.Parse(fechFinal.Value.ToShortDateString() + " 23:59:59");

                query = (from sp in query
                         where sp.FechaVenta >= fechInicial && sp.FechaVenta <= fechFinal
                         orderby sp.FechaVenta descending
                         select sp).Take(50);
            }
            #endregion

            return query.ToList();
        }


        public void GetVentaAccionesByIdForComprobante(int idVenta)
        {
            
        }

    }
}
